
/*
? JavaScript ES6的Set类有以下常见方法：

?-  add(value) ：向Set中添加一个值
?-  clear() ：删除Set中的所有值
?-  delete(value) ：从Set中删除一个值
?-  entries() ：返回Set中所有元素的键/值对
?-  forEach(callbackFn, thisArg) ：以插入顺序执行给定的回调函数
?-  has(value) ：如果Set中存在给定的值则返回 true ，否则返回 false
?-  keys() ：返回Set中所有元素的键
?-  size() ：返回Set中元素的数量
?-  values() ：返回Set中所有元素的值
 */
class mySet {
    constructor() {
        this.set = []
    }
    add(value) {
        if (!this.has(value)) {
            this.set.push(value)
        }
    }
    clear() {
        this.set = []
    }
    delete(value) {
        if (this.has(value)) {
            this.set = this.set.filter((item) => item !== value)
            return true
        }
        return false
    }
    entries() {
        let kv = []
        for (let i = 0; i < this.set.length; i ++) {
            kv.push({
                key : this.set[0],
                value : this.set[0]
            })
        }
        return kv
    }
    forEach(callback,thisArg) {
        for (let i = 0; i < this.set.length; i ++) {
            console.log(callback(this.set[i], i, this.set));
        }

    }
    has(value) {
        return this.set.includes(value)
    }
    keys() {
        return this.set
    }
    size() {
        return this.set.length
    }
    values() {
        return this.set
    }
}
let set = new mySet()
set.add(1)
set.add(2)
console.log(set)
console.log(set.has(2));
console.log(set.entries());
console.log(set.values());
console.log(set.keys());
console.log(set.size());
set.delete(1)
console.log(set)
set.forEach(item => item + 2)
